package com.lidong.zc.databasemodel.annotation;

import com.lidong.zc.databasemodel.constants.database.CharacterSetEnum;
import com.lidong.zc.databasemodel.constants.enumconst.StrCaseEnum;
import com.lidong.zc.databasemodel.constants.database.SqlColumnEnum;

import java.lang.annotation.*;

/**
 * 建表字段注解
 *
 * @author LiDong
 * @version 1.0.0
 * @createTime 9/6/2022 9:06 PM
 */
// This annotation is used to field
@Target(ElementType.FIELD)
// When  run is  effective
@Retention(RetentionPolicy.RUNTIME)
// Java document annotation
@Documented
public @interface Column {

    /**
     * 默认值
     *
     * @return String
     */
    String defaultValue() default "";

    /**
     * 字段名称
     *
     * @return String
     */
    String name() default "";

    /**
     * 字段大小写
     *
     * @return StrCaseEnum.UPPER
     */
    StrCaseEnum nameCase() default StrCaseEnum.UPPER;

    /**
     * 字段类型
     *
     * @return SqlColumnTypeConst
     */
    SqlColumnEnum dataType() default SqlColumnEnum.DEFAULT;

    /**
     * 字段长度
     *
     * @return 0
     */
    int length() default 0;

    /**
     * 精度
     *
     * @return 0
     */
    int decimalLength() default 0;

    /**
     * 非空
     *
     * @return false
     */
    boolean notNull() default false;

    /**
     * 是否主键
     *
     * @return false
     */
    boolean isPrimaryKey() default false;

    /**
     * 自增只有逐渐能自增
     *
     * @return false
     */
    boolean autoIncrement() default false;

    /**
     * 字符集
     *
     * @return CharacterSetEnum
     */
    CharacterSetEnum characterSet() default CharacterSetEnum.UTF_8;

    /**
     * 注释
     *
     * @return String
     */
    String remark() default "";

}
